<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <a href="void:0">点击下载</a>
    <a id="download" href="void:0">点击下载</a>

    <script>
      // Blob 是一种二进制数据类型，用于存储不可变的原始数据
      // 可以用于存储图片、视频、音频等二进制数据
      // 可以用于创建临时的下载链接，防止内存泄漏
      // const a = document.querySelector('a');
      // const str = '# hello world';
      // const blobObj = new Blob([str], { type: 'text/markdown'})
      // console.log('blobObj', blobObj);
      // const url = URL.createObjectURL(blobObj)
      // console.log('url', url);
      // a.href = url; // 链接临时指向内存中的blobObj
      // a.download = 'hello.md';
      // console.log('a', a);
      // setTimeout(() => {
      //     a.click();
      //     URL.revokeObjectURL(url);
      // }, 1000);
    </script>
    <script>
      // 点击下载后， 自动下载再删除url，防止内存泄漏
      function createTempURL(blob) {
        const url = URL.createObjectURL(blob); // Blob URL 是 指向内存的临时指针
        requestIdleCallback(() => {
          // 浏览器空闲时执行
          URL.revokeObjectURL(url);
        });
        return url;
      }
      const blog = new Blob(['# hello world\n## 这是一个二级标题'], { type: 'text/markdown' });
      const tempURL = createTempURL(blog); // 创建临时url
      const download = document.querySelector('#download');
      download.href = tempURL;
      download.download = 'hello-20230801.md';
      download.click();
    </script>
  </body>
</html>
